/**
 * 加入当前文件夹下有一个 test.txt 文件
 */
// >>>>>> 模拟从一个数据源读取内容, 然后把内容写入另外一个文件 <<<<<< //
// >>>>>> 模拟从一个数据源读取内容, 然后把内容写入另外一个文件 <<<<<< //
// >>>>>> 模拟从一个数据源读取内容, 然后把内容写入另外一个文件 <<<<<< //

let fs = require('fs')
// 🧡🧡🧡🧡🧡 读取操作 🧡🧡🧡🧡🧡
let rs = fs.createReadStream('./test.txt', {
  flags: 'r',
  encoding: null,
  fd: null,
  mode: 438,
  autoClose: true,
  start: 0,
  highWaterMark: 3,
})

let bufferArr = []
rs.on('data', (chunk) => {
  bufferArr.push(chunk)
})

// 数据被读取完毕之后
rs.on('end', startWrite)

// 🧡🧡🧡🧡🧡 写入操作 🧡🧡🧡🧡🧡
function startWrite() {
  let ws = fs.createWriteStream('write-after-read.txt', { highWaterMark: 3 })
  let source = Buffer.concat(bufferArr).toString()
  source = source.split('')

  let index = 0
  let flag = true

  // 执行写入
  function executeWrite() {
    flag = true
    while (index !== source.length && flag) {
      flag = ws.write(source[index])
      index++
    }
  }
  executeWrite()

  // 可写流的 drain 事件, 缓存区空了 可以继续写数据
  ws.on('drain', () => {
    // 可以做一些其他的操作
    executeWrite()
  })
}
